/**
在 TypeScript 中，类是面向对象编程的重要组成部分，它允许开发者创建具有属性和方法的对象。类的基本使用提供了一种结构化的方式来组织代码。
  1. 类的定义
  类使用  `class`  关键字定义，类的名称通常以大写字母开头。

  示例：
  class Person {
      name: string;
      age: number;

      constructor(name: string, age: number) {
          this.name = name;
          this.age = age;
      }

      greet() {
          console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
      }
  }
  2. 创建类的实例
  使用  `new`  关键字来创建类的实例。

  示例：
  const person1 = new Person("Alice", 30);
  person1.greet(); // 输出: Hello, my name is Alice and I am 30 years old.
  3. 类的访问修饰符

  TypeScript 提供了三种访问修饰符来控制类成员的可见性：

  -  `public` : 默认修饰符，表示可以在类的外部访问。
  -  `private` : 只能在类内部访问，无法在类的外部访问。
  -  `protected` : 只能在类及其子类中访问。

  示例：
  class Person {
      private id: number;
      public name: string;
      protected age: number;

      constructor(id: number, name: string, age: number) {
          this.id = id;
          this.name = name;
          this.age = age;
      }

      getId() {
          return this.id; // 允许在类内部访问 private 属性
      }
  }
  4. 继承

  TypeScript 支持类的继承，子类可以继承父类的属性和方法。使用  `extends`  关键字实现继承。

  示例：
  class Employee extends Person {
      position: string;

      constructor(id: number, name: string, age: number, position: string) {
          super(id, name, age); // 调用父类的构造函数
          this.position = position;
      }

      describe() {
          console.log(`I am ${this.name}, a ${this.position}.`);
      }
  }

  const employee = new Employee(1, "Bob", 25, "Developer");
  employee.greet(); // 输出: Hello, my name is Bob and I am 25 years old.
  employee.describe(); // 输出: I am Bob, a Developer.
  5. 抽象类

  抽象类是不能被实例化的类，通常用于作为其他类的基类。使用  `abstract`  关键字定义抽象类和抽象方法。

  示例：
  abstract class Animal {
      abstract makeSound(): void; // 抽象方法

      move() {
          console.log("Moving...");
      }
  }

  class Dog extends Animal {
      makeSound() {
          console.log("Woof!");
      }
  }

  const dog = new Dog();
  dog.makeSound(); // 输出: Woof!
  dog.move(); // 输出: Moving...
  6. 结论

  在 TypeScript 中，类提供了一种组织和管理代码的方式，支持面向对象编程的基本特性，如封装、继承和多态。通过使用类，开发者可以创建更结构化和可维护的代码。在实际开发中，合理使用类的各种特性，可以提高代码的可读性和可维护性。
 */

  class Person {
    // 成员属性: 声明成员属性
    name: string;
    age: number;

    constructor(name: string, age: number) {
      this.name = name;
      this.age = age;
    }

    eating() {
      console.log(this.name + " is eating");
    }

    runing() {
      console.log(this.name + " is runing");
    }
  }

  const p = new Person("Tom", 18);
  p.eating();
  console.log(p.name, p.age);
  

  export {}
